package com.lgcns.andteam2.todaymenu.info;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.content.Context;

import com.lgcns.andteam2.todaymenu.Constants;
import com.lgcns.andteam2.todaymenu.Util;

public class TodayInfo {
    private String date;
    private String dateText;
    private String gubunCode;
    private String gubun;
    
    private TodayInfo() {
    }

    /**
     * 오늘 메뉴를 조회하기 위한 날짜, 끼니 정보를 얻는다.
     * @param context
     * @return
     */
    public static TodayInfo getTodayInfo(Context context) {
        TodayInfo todayInfo = new TodayInfo();
        todayInfo.refresh(context);

        return todayInfo;
    }
    
    /**
     * 오늘 메뉴를 조회하기 위한 날짜, 끼니 정보를 다시 계산한다.
     * @param context
     */
    public void refresh(Context context) {
        Calendar cal = Calendar.getInstance();
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        
        // 토, 일 인 경우에는 다음주 월요일로 설정
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        
        if(dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
            cal.add(Calendar.DATE, (dayOfWeek == Calendar.SATURDAY) ? 2 : 1);
            // 다음주로 바뀐 경우는 현재 시간과 관계없이 무조건 아침
            gubunCode = Constants.BREAKFAST_GUBUN_CODE;
        } else {
            if(hour < Constants.BREAKFAST_HOUR) {
                gubunCode = Constants.BREAKFAST_GUBUN_CODE;
            } else if(Constants.BREAKFAST_HOUR <= hour && hour < Constants.LUNCH_HOUR) {
                gubunCode = Constants.LUNCH_GUBUN_CODE;
            } else if(Constants.LUNCH_HOUR <= hour) {
                gubunCode = Constants.DINNER_GUBUN_CODE;
            }
        }
        
        date = Util.dfYyyymmdd.format(cal.getTime());
        gubun = getGubunText(context, gubunCode);

        SimpleDateFormat df = new SimpleDateFormat("M.d(E");
        dateText = df.format(cal.getTime()) + "/" + gubun + ")";
    }
    
    /**
     * 오늘 메뉴를 조회하기 위한 "YYYYMMDD" 형식의 날짜를 반환한다.
     * @return
     */
    public String getDate() {
        return date;
    }

    /**
     * 오늘 메뉴의 날짜/구분 정보를 "M.d(E/[구분코드])" 형식으로 반환한다.
     * @return
     */
    public String getDateText() {
        return dateText;
    }

    public String getGubunCode() {
        return gubunCode;
    }

    /**
     * 구분(아침, 점심, 저녁) 문자열을 반환한다.
     * @return
     */
    public String getGubun() {
        return gubun;
    }

    private static String getGubunText(Context context, String gubunCode) {
        if(Constants.BREAKFAST_GUBUN_CODE.equals(gubunCode)) {
            return Constants.BREAKFAST_GUBUN;
        } else if(Constants.LUNCH_GUBUN_CODE.equals(gubunCode)) {
            return Constants.LAUNCH_GUBUN;
        } else if(Constants.DINNER_GUBUN_CODE.equals(gubunCode)) {
            return Constants.DINNER_GUBUN;
        }
        
        return null;
    }
    
}
